using System.Collections.Generic;

namespace LocalDnsSdk.Commands
{
    /// <summary>
    /// 所有指令的抽象基类。
    /// - 包含名称、格式、说明、权限等元信息。
    /// - 包含参数验证方法，用于在执行前校验输入。
    /// - 每条具体指令以一个类实现，并将名称常量化到对应类中。
    /// </summary>
    public abstract class BaseCommand
    {
        /// <summary>指令名称（常量化到子类中）。</summary>
        public abstract string Name { get; }
        /// <summary>指令的输入格式示例。</summary>
        public abstract string Format { get; }
        /// <summary>指令说明。</summary>
        public abstract string Description { get; }
        /// <summary>权限级别。</summary>
        public abstract CommandPermission Permission { get; }
        /// <summary>兼容别名（按需）。</summary>
        public virtual IEnumerable<string> Aliases => new string[0];

        /// <summary>
        /// 参数验证。
        /// 返回 true 表示通过；返回 false 时在 error 中写入错误原因。
        /// </summary>
        public abstract bool Validate(string[] args, out string error);
    }
}